package org.posupe.empresas;

import java.io.Serializable;

import org.posupe.areas.Area;
import org.posupe.pessoas.PessoaJuridica;
import org.posupe.util.Endereco;

/**
 * @author Marcio Calado
 */
public class Empresa extends PessoaJuridica implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Area area;

	public Empresa(String cnpj, String razaoSocial, String nomeFantasia,
			Endereco endereco, Area area, String telefone, String fax, String email) {
		super(cnpj, razaoSocial, nomeFantasia, telefone, fax, email, endereco);

		this.area = area;
	}

	public Empresa(String cnpj) {
		this(cnpj, null, null, null, null, null, null, null);
	}

	public Area getArea() {
		return area;
	}

	public boolean match(Empresa empresa) {
		boolean retorno = true;
		
		if((empresa != null)
				&& (empresa.getCodigo() != null || empresa.getEmail() != null 
				|| empresa.getEndereco() != null || empresa.getFax() != null 
				|| empresa.getNome() != null || empresa.getNomeFantasia() != null 
				|| empresa.getTelefone() != null)
				&& (this.getCodigo() != null || this.getEmail() != null 
				|| this.getFax() != null || this.getEndereco() != null
				|| this.getNome() != null || this.getNomeFantasia() != null
				|| this.getTelefone() != null)){
			retorno = super.match(empresa);
		}
		
		if((empresa == null)){
			retorno = false;
		}

		if (retorno && empresa.area != null) {
			if (this.area != null ) {
				retorno = this.area.match(empresa.area);
			}else{
				retorno = false;
			}
		}

		return retorno;
	}

	public void setArea(Area area) {
		this.area = area;
	}

	public String toString() {
		String r = " "; 
			r = (this.getCodigo()==null?" ":this.getCodigo())+ " : " 
			+ (this.getNome()==null?" ":this.getNome())+ " - "
			+ (this.getNomeFantasia()==null?" ":this.getNomeFantasia());
		return r.trim();
	}
	
	public boolean equals(Object o) {
		boolean resultado = false;
		if (o instanceof Empresa) {
			Empresa aux = (Empresa) o;
			if (aux.getCodigo().equals(this.getCodigo())) {
				resultado = true;
			}
		}
		return resultado;
	}
}
